Інформація про новину
  • Переглядів: 14897
  • Дата: 15-09-2020, 10:50
15-09-2020, 10:50

4.3. Величини в алгоритмах з розгалуженням

Категорія: Інформатика





Попередня сторінка:  4.2. Система координат у проектах створ...
Наступна сторінка:   4.4. Величини в алгоритмах із циклами

1. Який фрагмент алгоритму називається повним розгалуженням? Як він виконується? Наведіть приклади.

2. Який фрагмент алгоритму називається неповним розгалуженням'? Як він виконується? Наведіть приклади.

3. Яка команда є в кожному розгалуженні? Якими можуть бути результати її виконання?

Обчислення значення виразу, що містить дію ділення

У пункті 4.1 ви складали алгоритми і проекти для обчислення значення виразу, що містить дії додавання, віднімання та множення. Значення таких виразів можна обчислити при будь-яких значеннях змінних, що входять до цих виразів.

Розглянемо тепер задачу на обчислення значення виразу, що містить дію ділення.

Задача 1. Обчислити значення виразу (2*х + у) І [2*х- у), де х і у - довільні числа (символом / в інформатиці позначають дію ділення).

Створимо математичну модель для розв’язування цієї задачі.

Ви вже знаєте, що дію ділення можна виконати не завжди. Тому і значення цього виразу можна обчислити не при будь-яких значеннях змінних х та у. Адже цей вираз містить дію ділення на вираз зі змінними, значення якого може дорівнювати нулю. Тобто якщо значення дільника 2*х- у дорівнює нулю, то значення виразу (2*х + у) / (2*х- у) обчислити не можна, а якщо не дорівнює - то можна. Наприклад, якщо х = 1 і у = 2, то значення цього виразу обчислити не можна, а якщо, наприклад, х = 3 і у = 4, то значення цього виразу обчислити можна.

Це означає, що залежно від значення виразу 2*х- у в алгоритмі виконуватимуться різні команди: якщо 2*х- у = 0, то повинна виконуватися команда виведення повідомлення, що значення виразу обчислити не можна; якщо 2 *х- у * 0, то повинні виконуватися команди для обчислення значення виразу.

Тобто цей алгоритм має містити повне розгалуження.

Блок-схему алгоритму розв’язування цієї задачі подано на малюнку 4.17.

Проілюструємо виконання цього алгоритму для двох наборів значень змінних. Ці два набори значень підберемо так, щоб проілюструвати хід виконання алгоритму для кожного з двох можливих результатів виконання команди перевірки умови.

Відповідно до алгоритму розв’язування цієї задачі, складаючи проект у середовищі розробки та виконання проектів, потрібно створити 5 змінних: х, у, а, Ь, с, і змінним х та у надати значення, для яких потрібно обчислити значення виразу. Потім слід обчислити значення дільника 2*х - у, запам’ятати його (змінна а) і порівняти це значення з нулем. Якщо це значення дорівнює нулю, то вивести повідомлення, що обчислити значення виразу не можна. Інакше: тобто якщо це значення не дорівнює нулю, то потрібно обчислити значення діленого 2*х + у і запам’ятати його (змінна Ь), потім поділити ділене на дільник, запам’ятати результат (змінна с) і повідомити значення цієї змінної.

Лля тих, хто працює зі Scratch 2

Для розв’язування цієї задачі можна скласти проекту Scratch 2. Вигляд проекту наведено на малюнку 4.18.

Зауважимо, що в цьому проекті для введення значень змінних х та у замість перших двох блоків надати можна використати блоки запитати і чекати.

Лля тих, хто працює з Python

Розглянемо проект розв’язування Задачі 1 у Python. Повне розгалуження мовою Python має вигляд:

Звертаємо вашу увагу, що послідовності команд 1 та 2 записано з відступом праворуч від лівої межі вікна. Ці відступи в Python визначають блоки команд, які виконуються залежно від результату виконання команди перевірки умови. Як ви вже знаєте, відступи створюються автоматично під час натискання клавіші Enter після символа «:» або їх можна ставити самостійно, натиснувши клавішу Tab. Запис команд, які виконуються за межами блока, повинен починатися ближче до лівої межі вікна. Для зменшення відступу від лівої межі можна скористатися клавішею Backspace.

У команді перевірки умови в Python можна використовувати оператори порівняння: > (більше), < (менше), >= (більше або дорівнює), <= (менше або дорівнює), == (дорівнює, записують два символи «= » без пропуску), != (не дорівнює).

Вигляд проекту обчислення значення виразу (2*х + у) / [2*х - у) наведено на малюнку 4.19.

Визначення більшого (меншого) з двох значень

Розглянемо таку задачу.

Задача 2. Мати дала Марічці а грн, щоб вона купила ласощі та пригостила своїх шкільних друзів на свій день народження. Марічка вирішила купити 0,8 кг цукерок і 0,5 кг печива. У магазині Марічці сподобалися цукерки по ціні хгрн за 1 кг і печиво по ціні у грн за 1 кг. Чи вистачить Марічці грошей на цю покупку?

Створимо математичну модель для розв’язування цієї задачі.

Очевидно, що потрібно визначити вартість запланованої покупки і порівняти її із сумою грошей, яку дала мати Марічці. Якщо вартість покупки більша за суму наявних грошей, то не вистачить, а якщо інакше, тобто, не більша (менша або дорівнює), то вистачить.

Отже, алгоритм розв’язування цієї задачі має містити розгалуження. Блок-схему цього алгоритму подано на малюнку 4.20.

Для тих, хто працює зі Scratch 2

Для розв’язування вищенаведеноїзадачі можна скласти проекту Scratch 2. Він виглядатиме так (мал. 4.21):

Для тих, хто працює з Python

Проект розв’язування Задачі 2 в Python подано на малюнку 4.22.

Для тих, хто працює зі Scratch 2

Рух по Сцені з використанням розгалуження в Scratch 2

Складемо проект у Scratch 2, у якому виконавець за натиснутої клавіші стрілка праворуч рухається по Сцені вправо. Після того як він дійде до правого краю Сцени, він з’являється на Сцені з протилежного боку.

Для цього повернемо виконавця в напрямку праворуч і використаємо подію коли натиснуто клавішу стрілка праворуч. За натиснутої цієї клавіші виконавець переміщатиметься на 10 кроків. Якщо абсциса його положення на Сцені стане більшою за 240 (досягнуто правий край Сцени), то виконавець переміститься в точку біля лівого краю Сцени (абсциса -240). Алгоритм цього проекту і хід його виконання наведено на малюнку 4.23.

Для тих, хто працює з Python

У Python є можливість керувати рухом Черепашки шляхом натискання клавіш на клавіатурі. Для кожної клавіші, натискання якої буде опрацьовуватися у проекті, можна вказати різні дії Черепашки. Для цього призначено команду onkey (англ. on - на, key-клавіша).

Загальний вигляд команди onkey такий:

опкеу(команда, 'клавіша')

Наприклад, якщо потрібно після натискання клавіші Пропуск повернути Черепашку в центр полотна, то потрібно вказати команду home і код клавіші Пропуск - слово «space». Команда опрацювання натискання клавіші буде такою: onkey(home, 'space').

Але якщо після натискання клавіші потрібно виконати команду з параметрами (наприклад, fd(20)) або декілька команд, то ці команди описують в окремому алгоритмі. Алгоритму потрібно надати ім’я і саме це ім’я ввести в команді onkey.

Наприклад, якщо потрібно при натисканні клавіші стрілка праворуч повертати Черепашку в напрямку праворуч і переміщувати на 10 кроків, то іменем такого алгоритму може бути move_right (англ. move - рухатись, right - праворуч). Кодом клавіші стрілка праворуч є слово «Right». Команда, яка викликає виконання алгоритму move_right у відповідь на натискання клавіші стрілка праворуч, має вигляд: onkey(move_right, 'Right').

Опис алгоритму move_right розпочинається із заголовка, який має такий вигляд: def move_right(): (англ. definition - визначення). Після заголовка описуються команди алгоритму. У проекті вони повинні розміщуватися з відступом вправо від лівої межі екрана.

Щоб у проекті відстежувалися натискання на клавіші, потрібно використати команду listen() (англ. listen - слухати).

Складемо проект у Python, у якому Черепашка після кожного натискання клавіші стрілка праворуч рухається по полотну праворуч. Після того як Черепашка дійде до точки на полотні з абсцисою 300, вона з’явиться на полотні з протилежного боку в точці з абсцисою -300.

Під час виконання цього алгоритму Черепашка переміщатиметься на 10 кроків (команда fd(10)). Для визначення абсциси положення виконавця використаємо команду хсог(), для встановлення нового значення координати - команду setx(-300). Отже, алгоритм руху вправо move_right може бути таким:

Переміщення Черепашки в точку на полотні з абсцисою -300 виглядатиме як рух у напрямку ліворуч. Тому доцільно:

• на час переміщення приховати зображення Черепашки (команда hideturtle()) (англ. hide - приховати);

• установити високу швидкість переміщення (команда speed(O));

• після переміщення відобразити зображення виконавця (команда showturtle()) (англ. show - показувати);

• уповільнити швидкість руху виконавця (команда speed(1)).

Ці команди варто розмістити в алгоритмі move_right у команді розгалуження.

До проекту також доцільно додати команди:

• змінити зображення виконавця на черепашку - команда shapef'turtle");

• підняти олівець, щоб виконавець не залишав сліду - команда ир();

• установити повільну швидкість руху виконавця - команда speed(1).

Отже, проект може мати вигляд, наведений на малюнку 4.24.

Звертаємо вашу увагу, що після символа «#» у проекті записано коментарі, які пояснюють призначення команд і не виконуються під час виконання проекту.

Працюємо з комп'ютером

Увага! Під час роботи з комп’ютером дотримуйтеся вимог безпеки життєдіяльності та санітарно-гігієнічних норм.

Завдання 1. Складіть проект для обчислення значення виразу (х- 3*у)/(3*у+ х).

Лля тих, хто працює зі Scratch 2

1. Відкрийте середовище Scratch 2.

2. Відкрийте групу блоків Величини і створіть дві змінні х та у.

3. Створіть ще три змінні: а, Ь і с, щоб запам’ятати значення дільника, діленого і всього виразу.

4. Розмістіть в Області скриптів два блоки

з коман

дами надання змінним х та у значень.

5. Розмістіть в Області скриптів блок

з командою

обчислення значення дільника.

6. Розмістіть в Області скриптів блок розгалуження

Для того щоб у блок розгалуження якщо вставити команду перевірки умови а = 0, слід:

1. Уставити в поле після слова якщо блок

з групи Оператори.

2. Уставити в ліве поле цього блока кнопку з іменем величини а з групи Величини.

3. Увести у праве поле цього блока число 0.

7. Збережіть складений проект у вашій папці у файлі з іменем вправа 4.3.1-1.

8. Запустіть проект на виконання.

9. Проаналізуйте результат виконання проекту.

10. Уведіть інші значення змінних, наприклад х = -3, у - 1.

11. Запустіть проект на виконання.

12. Проаналізуйте результат виконання проекту.

13. Змініть значення змінних х та у на такі, щоб можна було обчислити значення виразу.

14. Запустіть проект на виконання.

15. Проаналізуйте результат виконання проекту.

16. Змініть значення змінних х та у на такі, щоб не можна було обчислити значення виразу.

17. Запустіть проект на виконання.

18. Замініть у проекті перші два блоки надати на блоки запитати і чекати.

19. Збережіть нову версію проекту у вашій папці у файлі з іменем вправа 4.3.1-2.

20. Запустіть проект на виконання. Уведіть значення змінних, при яких можна було обчислити значення виразу, і значення змінних, при яких не можна обчислити значення виразу.

21. Проаналізуйте результати виконання проекту.

22. Закрийте середовище Scratch 2.

Для тих, хто працює з Python

1. Відкрийте середовище IDLE.

2. Створіть нове вікно для введення тексту проекту.

3. Уведіть команди надання змінним х та у значень: х= 1

У= з

4. Уведіть команду обчислення значення дільника: а = 3*у + х

5. Уведіть команду розгалуження:

6. Збережіть складений проект у вашій папці у файлі з іменем вправа 4.3.1-1.

7. Запустіть проект на виконання.

8. Проаналізуйте результат виконання проекту.

9. Уведіть інші значення змінних, наприклад х = -3, у = 1.

10. Запустіть проект на виконання.

11. Проаналізуйте результат виконання проекту.

12. Змініть значення змінниххта у на такі, щоб можна було обчислити значення виразу.

13. Запустіть проект на виконання.

14. Проаналізуйте результат виконання проекту.

15. Змініть значення змінних х та у на такі, щоб не можна було обчислити значення виразу.

16. Запустіть проект на виконання.

17. Замініть у проекті перші дві команди на команди введення довільних чисел.

18. Збережіть нову версію проекту у вашій папці у файлі з іменем вправа 4.3.1-2.

19. Запустіть проект на виконання. Уведіть значення змінних, при яких можна обчислити значення виразу, і значення змінних, при яких не можна обчислити значення виразу.

20. Проаналізуйте результати виконання проекту.

21. Закрийте всі відкриті вікна.

Завдання 2. Складіть проект для руху виконавця в горизонтальному напрямку праворуч і у вертикальному напрямку вниз - залежно від натиснутої клавіші.

Для тих, хто працює зі Scratch 2

1. Відкрийте середовище Scratch 2.

2. Розмістіть виконавця в середині сцени.

3. Розмістіть в Області скриптів алгоритм, наведений на малюнку 4.23.

Для правильного вставляння команди перевірки умови у блок розгалуження слід:

1. Уставити у блок розгалуження блок порівняння

з групи Оператори.

2. Уставити в ліве поле блока порівняння блок

з групи Рух.

3. Увести у праве поле блока порівняння число 240.

4. Збережіть складений проект у вашій папці у файлі з іменем вправа 4.3.2.

5. Запустіть проект на виконання. Натисніть та утримуйте натиснутою клавішу стрілка праворуч, спостерігаючи за переміщенням виконавця.

6. Додайте до алгоритму в Області скриптів такий фрагмент:

Рекомендуємо: продублювати вже наявний фрагмент і змінити копію потрібним чином.

7. Збережіть нову версію проекту у вашій папці у файлі з тим самим іменем.

8. Запустіть проект на виконання. Використовуючи клавіші стрілка праворуч і стрілка вниз, переміщуйте виконавця у відповідному напрямку. Спостерігайте за переміщенням виконавця, особливо біля країв Сцени.

9. Закрийте середовище Scratch 2.

Для тих, хто працює з Python

1. Відкрийте середовище IDLE.

2. Відкрийте нове вікно для введення тексту проекту.

3. Уведіть текст проекту, наведений на малюнку 4.24.

4. Збережіть складений проект у вашій папці у файлі з іменем вправа 4.3.2.

5. Запустіть проект на виконання. Натискайте клавішу стрілка праворуч, спостерігаючи за переміщенням виконавця.

6. Додайте до проекту:

• команду пов’язування нового алгоритму з натисканням клавіші стрілка вниз: onkey(move_down, "Down");

• команду повороту в напрямку вправо на початок алгоритму move_right: setheading(O);

• алгоритм з іменем move_down (англ. down - униз):

Рекомендуємо: скопіювати та вставити вже наявний алгоритм і змінити його потрібним чином.

7. Збережіть нову версію проекту у вашій папці у файлі з тим самим іменем.

8. Запустіть проект на виконання. Використовуючи клавіші стрілка праворуч і стрілка вниз, переміщуйте виконавця у відповідному напрямку. Спостерігайте за переміщенням виконавця, особливо біля країв полотна.

9. Закрийте всі відкриті вікна.

Найважливіше в цьому пункті

Якщо вираз містить дію ділення на вираз зі змінними, то його значення можна обчислити не при всіх значеннях змінних. Якщо дільник дорівнює нулю, то значення виразу обчислити не можна, якщо інакше, тобто не дорівнює, то можна.

Тому в алгоритмах для обчислення значень виразу, що містить дію ділення на вираз зі змінними, спочатку потрібно обчислити значення дільника. І далі включити в алгоритм розгалуження, у якому або буде виводитися відповідне повідомлення, якщо значення виразу обчислити не можна, або буде обчислено значення цього виразу.

Розгалуження можна використати для визначення, значення якої з двох змінних більше чи менше або ці значення рівні.

Розгалуження можна також використовувати для виконання різних команд, які виконає виконавець під час руху по Сцені у Scratch 2 та по полотну у проектах у Python.

Лайте відповіді на запитання

1*. Чим відрізняється лінійний фрагмент алгоритму від розгалуження?

2°. Чим відрізняється алгоритм для обчислення значення виразу (2*х + у) / (2*х-у) від алгоритму для обчислення значення виразу (2*х + у)*(2*х- у)?

З*. При яких значеннях змінних результатом виконання алгоритму обчислення значення виразу (4*х- у) / (х + 2*у) буде повідомлення: «Обчислити неможливо»? Наведіть кілька прикладів.

4*. Чи завжди алгоритм для обчислення значення виразу, що містить дію ділення, буде містити розгалуження? Поясніть свою відповідь.

5*. Чи існує вираз з однією змінною, що містить дію ділення на вираз зі змінною, значення якого можна обчислити при будь-яких значеннях цієї змінної?

6*. Як можна використати в розгалуженні координати положення виконавця на Сцені? Наведіть приклад.

7*. Як можна використати в розгалуженні координати положення виконавця на полотні у проектах у Python? Наведіть приклад.

8°. Як можна визначити, використовуючи розгалуження, яке з двох різних чисел більше?

Виконайте завдання

1°. Виконайте алгоритм і запишіть у зошит хід його виконання:

1. Задумати два цілих числа.

2. Обчислити суму задуманих чисел.

3. Перевірити «Знайдена сума більша за ЗО?».

4. Якщо істина, то повідомити «Більша» і виконати команду 8, якщо хиба, то виконати команду 5.

5. Перевірити «Знайдена сума менша ніж ЗО?».

6. Якщо істина, то повідомити «Менша» і виконати команду 8, якщо хиба, то виконати команду 7.

7. Повідомити «Дорівнює».

8. Закінчити виконання алгоритму.

2*. Складіть проект для алгоритму, наведеного в завданні 1. Збережіть складений проект у вашій папці у файлі з іменем завдання 4.3.2.

З*. Складіть бпок-схему алгоритму, наведеного в завданні 1. Виконайте в зошиті цей алгоритм для двох різних пар цілих чисел. Підберіть ці пари так, щоб кожного разу виконання алгоритму відбувалося по-іншому.

4е. Складіть математичну модель і бпок-схему алгоритму обчислення значення виразу: (а + b) - b І (2*а - 1). Виконайте його при різних значеннях а і Ь. Підберіть числа так, щоб кожного разу виконання алгоритму відбувалося по-іншому.

5*. Складіть проект для алгоритму, складеного в завданні 4. Виконайте проект кілька разів для різних значень а і Ь. Збережіть складений проект у вашій папці у файлі з іменем завдання 4.3.5.

6*. Складіть математичну модель і блок-схему алгоритму обчислення значення виразу: (а + b) - с І (а - 2*Ь). Виконайте його при різних значеннях а, b і с. Підберіть числа так, щоб кожного разу виконання алгоритму відбувалося по-іншому. 7*. Складіть проект для алгоритму, складеного в завданні 6. Збережіть складений проект у вашій папці у файлі з іменем завдання 4.3.7.

8*. Петрик пройшов х год зі швидкістю 5 км/год, а Катерина - у год зі швидкістю 4 км/год. Складіть математичну модель і проект для визначення, хто з них пройшов більшу відстань, коли відомо, що ці відстані різні. Збережіть складений проект у вашій папці у файлі з іменем завдання 4.3.8.

9*. Катя пройшла х км зі швидкістю 5 км/год, а Тарас - у км зі швидкістю 4 км/год. Складіть математичну модель і проект для визначення, хто з них ішов більше часу або, можливо, вони йшли один і той самий час. Збережіть складений проект у вашій папці у файлі з іменем завдання 4.3.9.

10*. Складіть проект для руху виконавця вліво і для руху виконавця вгору за на-тиснутої відповідної клавіші. Вказівка: у Python клавіша стрілка ліворуч кодується словом Left (англ. left - наліво), клавіша стрілка вгору - словом Up (англ. up - вгору). Збережіть складений проект у вашій папці у файлі з іменем завдання 4.3.10.

11*. Складіть проект, у якому виконавець дійде до правого краю Сцени, обійшовши червоні перешкоди (мал. 4.25). Збережіть складений проект у вашій папці у файлі з іменем завдання 4.3.11. Вказівка: використайте блок доторкається кольору з групи Датчики.

12*. Складіть проект, у якому відбувається малювання квадрата, довжина сторони якого дорівнює випадковому числу, якщо це випадкове число більше за 100, або малюється рівносторонній трикутник, довжина сторони якого дорівнює випадковому числу, якщо це випадкове число не більше за 100. Збережіть складений проект у вашій папці у файлі з іменем завдання 4.3.12.

ПРАКТИЧНА РОБОТА № 7

«Створення проектів з розгалуженням»

Увага! Під час роботи з комп’ютером дотримуйтеся вимог безпеки життєдіяльності та санітарно-гігієнічних норм.

1. Відкрийте середовище розробки та виконання проектів.

2. Складіть математичну модель і проект для обчислення значення виразу (а + 4*с) / (2*с + а). Збережіть складений проект у вашій папці у файлі з іменем практична 7.1.

3. Стефанія купила 3 порції морозива і 2 пляшки газованої води, а Михайло -2 порції того самого морозива і 3 пляшки тієї самої газованої води. Складіть математичну модель і проект для визначення, хто з дітей витратив більше грошей або, можливо, вони витратили однакову суму грошей. Збережіть складений проект у вашій папці у файлі з іменем практична 7.2.

4. Складіть проект переміщення виконавця від лівого краю Сцени до правого за натискання клавіші стрілка праворуч. У процесі переміщення, якщо абсциса його положення від’ємна, він грає певний звук, якщо абсциса його положення стає додатною, він змінює костюм, а якщо абсциса його положення стає більша за 100, він виводить відповідне повідомлення. Збережіть складений проекту вашій папці у файлі з іменем практична 7.3.

Складіть проект переміщення виконавця від лівого краю полотна до правого за натискання клавіші стрілка праворуч. У процесі переміщення, якщо абсциса його положення від’ємна, він зафарбований у червоний колір, якщо абсциса його положення стає додатною, він перефарбовується в синій колір, а якщо абсциса його положення стає більша за 100, він виводить відповідне повідомлення. Збережіть складений проект у вашій папці у файлі з іменем практична 7.3.

5. Закрийте середовище розробки та виконання проектів.

 

Це матеріал з підручника Інформатика за 7 клас Ривкінд 2020

 




Попередня сторінка:  4.2. Система координат у проектах створ...
Наступна сторінка:   4.4. Величини в алгоритмах із циклами



^